package com.agilya.utilitaires;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

public class UploadImage implements UploadInterface {

	public List<String> UploadFile(HttpServletRequest request) throws UploadImageExceptions {

		// On prépare les extension de fichier qui seront accepter en upload
		List<String> listOfExtensions = new ArrayList<String>(5);

		List<String> listFilesnames = new ArrayList<>();

		listOfExtensions.add("png");
		listOfExtensions.add("jpg");
		listOfExtensions.add("jpeg");
		listOfExtensions.add("gif");

		// Création du format de la date pour le fichier, il sera donc renomer
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd-HH-mm-ss");
		String date = dateFormat.format(new Date());

		// on prépare pour l'envoie par la mise en oeuvre en mémoire
		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();

		ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
		try {
			List<FileItem> items = (List<FileItem>) uploadHandler.parseRequest(request);

			Iterator<FileItem> itr = (Iterator<FileItem>) items.iterator();
			// au besoin on creer le dossier principal des archive et le sous
			// dossier qui correspond à l'année en cour
			try {
				new File(Configuration.getAbsolutePathDossierUploadImage(request) + "/").mkdirs();

			} catch (Exception e) {
				throw new UploadImageExceptions("Impossible de créer le dossier");
			}
			while (itr.hasNext()) {
				FileItem item = (FileItem) itr.next();

				// on récupère l'extension du fichier qui est uploader
				String fileExtensionName = FilenameUtils.getExtension(item.getName().toLowerCase());
				String fileName = date + "_" + item.getName();
				System.out.println("Création du fichier");
				// on donne le chemin d'écriture au fichier ainsi que sont nom
				// et on le met dans l'année en cours
				File file = new File(Configuration.getAbsolutePathDossierUploadImage(request) + "/", fileName);
				// on vérifie si les extensions des fichier uploader sont
				// acceptée ou pas
				if (listOfExtensions.contains(fileExtensionName)) {
					// on écrit le fichier sur le disque dur
					item.write(file);
					listFilesnames.add(fileName);
				} else {
					throw new UploadImageMauvaisFormatExceptions("L'extention du fichier n'est pas valide");
				}
			}
			return listFilesnames;
		} catch (FileUploadException ex) {
			throw new UploadImageExceptions("Un problème est survenue lors du chargement de l'image");
		} catch (UploadImageMauvaisFormatExceptions formatExceptions) {
			throw formatExceptions;
		} catch (Exception ex) {
			ex.printStackTrace();
			return listFilesnames;
		}

	}

}
